/**
 * File:   Joueur.hpp
 * Author: CHABOT DIEP MYCEK
 *
 */

#ifndef _JOUEUR_HPP
#define	_JOUEUR_HPP

#include <iostream>
#include <string>
#include "GrilleMotsCroises.hpp"
#include "Ihm.hpp"

using namespace std;

/**
\class Joueur
\brief Gestion de la classe Joueur
Attributs :
- grilleJ : la grille de type GrilleMotsCroises sur laquelle le joueur va travailler.
- grilleSol : la grille de type GrilleMotsCroises qui sera la solution a laquelle on comparera grilleJ.
- ihm : un objet de type Ihm.
*/
class Joueur{
private :
	GrilleMotsCroises *grilleJ, *grilleSol;
	Ihm ihm;
	
public :
	/**
	\fn Joueur(const GrilleMotsCroises& grille)
	\brief constructeur de Joueur
	*/
	Joueur(const GrilleMotsCroises& grille);
	
	/**
	\fn ~Joueur()
	\brief destructeur de joueur
	*/
	~Joueur();
	
	/**
	\fn void jouer()
	\brief gestion principale du mode joueur
	\return void
	*/
	void jouer();
	
	/**
	\fn void afficherGrille(bool affDef)
	\brief affiche grilleJ. Fait appelle a la fonction affiche de GrilleMotsCroises.
	\param affDef = true si on veut afficher les definitions, false sinon.
	\return void
	*/
	void afficherGrille(bool affDef=true);
	
	/**
	\fn bool comparerGrilles(bool afficheDiff)
	\biref permet de comparer la grille du joueur et la grille de solution
	\param afficheDiff = true si l'on veut afficher la difference, false sinon
	\return true si les grilles sont identiques, false sinon;
	*/
	bool comparerGrilles(bool afficheDiff);
	
	/**
	\fn int proposerLettre()
	\brief permet de proposer une lettre a un emplacement donne de grilleJ. Appelle proposerLettre de GrilleMotsCroises.
	\return 1 si succes, 0 si echec.
	*/
	int proposerLettre();
	
	/**
	\fn int proposerMot()
	\brief permet de proposer un mot a un emplacement donne de grilleJ. Appelle proposerMot de GrilleMotsCroises.
	\return 1 si succes, 0 si echec.
	*/
	int proposerMot();
	
	/**
	\fn int effacerLettre()
	\brief permet d'effacer une lettre
	\return 1 si succes, 0 si echec.
	*/
	int effacerLettre();
	
	/**
	\fn int traduireColonne(string col)
	\brief permet de traduire les lettres designant les colonnes (A, B, ....) en indices
	\param col la chaine de caracteres (deux maximum) designant la colonne
	\return l'indice correspondant : entier
	*/
	int traduireColonne(string col);
};

#endif
